package net.elive.common.p2pnet.message;

import java.net.DatagramPacket;

import net.elive.common.p2pnet.AbstractMessage;
import net.elive.tools.ByteIntSwitch;
import net.elive.tools.ByteShortSwitch;
import net.elive.tools.Contants;
import net.elive.tools.MessageType;
/**
 * 
 * 注册数据包
 * @author jincool.cao@gmail.com
 *
 */
public class RegisterMessage extends AbstractMessage{
	/**消息类型注册消息***/
	public short sType = MessageType.STYPE_REGMESSAGE;
	/**
	 * 节点类型
	 */
	public short nodeType = 0;
	/**
	 * 数据包数据18个字节
	 */
	private byte[] dpData  = new byte[18];
	/**
	 * 数据服务器端口
	 */
	private int dbServerPort;			
	/**
	 * 协服务器端口
	 */
	private int assistServerPort;		
	/**
	 * 路由端口
	 */
	private int routePort;		
	
	/**
	 * 注册消息数据包的内容(共18个字节)
	 * 版本号   2B
	 * 消息服务类型2B  
	 * 网络节点类型(公网或内网) 2B
	 * 路由端口号  4B
	 * 服务器端口号 4B
	 * 协服务器端口号 4B
	 */
	public RegisterMessage() {
		routePort = Contants.ROUTE_PORT;					//rdp监听端口
		ByteShortSwitch.toByteArray(version, dpData, 0);	//添加网络协议版本号到数据包中
		ByteShortSwitch.toByteArray(sType, dpData, 2);		//将消息类型添加到数据包中
		ByteShortSwitch.toByteArray(Contants.NATIVE_NODETYPE, dpData, 4);	//添加本机网络节点类型到数据包中(默认公网)
		ByteIntSwitch.toByteArray(routePort,dpData,6);			//添加路由端口到数据包中
		ByteIntSwitch.toByteArray(Contants.DBSERVERPORT,dpData,10);		//添加服务器端口到数据包中
		ByteIntSwitch.toByteArray(Contants.ASSISTSERVERPORT,dpData,14);	//添加协服务器到数据包中
		dp = new DatagramPacket(dpData,dpData.length);
	}
	
	public RegisterMessage(DatagramPacket dp){
		this.dp =dp;
		dpData = dp.getData();							//数据包数据
		version = ByteShortSwitch.toShort(dpData, 0);	//版本
		sType = ByteShortSwitch.toShort(dpData, 2);		//消息类型
		nodeType = ByteShortSwitch.toShort(dpData, 4);	//节点类型
		routePort = ByteIntSwitch.toInt(dpData, 6);		//路由端口
		dbServerPort = ByteIntSwitch.toInt(dpData, 10);	//数据服务器端口
		assistServerPort = ByteIntSwitch.toInt(dpData, 14);	//协服务器端口
	}

	public short getNodeType() {
		return nodeType;
	}

	public int getRoutePort() {
		return routePort;
	}

	public int getDbServerPort() {
		return dbServerPort;
	}

	public int getAssistServerPort() {
		return assistServerPort;
	}

	public static void main(String []args){
		RegisterMessage reg = new RegisterMessage();
		System.out.println("========"+reg.getDatagramPacket().getData());
	}

}
